<?php

/**
 * Форма авторизации пользователя.
 *
 */
abstract class Security_Action_Login extends Kernel_Action_Form {

    /**
     * Флаг, указывающий, что после сохранения данных формы не нужно показывать
     * сответствующее сообщение.
     *
     * @var boolean
     */
    protected $_no_message = true;

    /**
     * Инициализирует элементы формы.
     *
     */
    protected function _initElements() 
    {
        $this->_addElement('login', array('caption' => __('EMAIL')));
        $this->_addElement('password', 'password');
        
        $this->_setAsRequired();
    }

    /**
     * Выполняет проверку данных формы.
     *
     */
    protected function _validate() 
    {
        parent::_validate();
        
        try {
            $this->_security()->authorize(
                $this->_getValue('login'),
                $this->_getValue('password')
            );
        } catch (Security_Exception_Authorize $e) {
            $this->_error($e->getMessage());
        }
    }

    /**
     * Возвращает реализацию модуля безопасности.
     *
     * @return  Security_Utils_Authorize
     */
    abstract protected function _security();
}
